"""
配置文件读取模块

用于读取和解析INI格式的配置文件，
提供统一的配置访问接口。
"""

import configparser
from config.config import cm
from utils.logger import log


# 配置文件中的section名称常量
SECTION_HOST = 'host'
SECTION_DRIVER = 'driver'


class ReadConfig:
    """INI配置文件读取器
    
    提供对INI格式配置文件的读取和更新功能，
    封装了配置项的访问接口。
    """
    
    def __init__(self, ini_file):
        """
        初始化配置文件读取器
        :param ini_file: INI配置文件路径
        """
        self.file = ini_file
        self.config = configparser.RawConfigParser()  # 使用RawConfigParser以支持特殊字符
        try:
            self.config.read(self.file, encoding='utf-8')
            log.info(f"成功读取配置文件: {ini_file}")
        except Exception as e:
            log.error(f"读取配置文件失败: {str(e)}")
            raise

    def _get(self, section, option):
        """
        获取指定section和option的配置值
        :param section: 配置节名称
        :param option: 配置项名称
        :return: 配置值
        """
        try:
            return self.config.get(section, option)
        except Exception as e:
            log.error(f"获取配置[{section}][{option}]失败: {str(e)}")
            raise

    def _set(self, section, option, value):
        """
        更新指定section和option的配置值
        :param section: 配置节名称
        :param option: 配置项名称
        :param value: 新的配置值
        """
        try:
            self.config.set(section, option, value)
            with open(self.file, 'w') as f:
                self.config.write(f)
            log.info(f"更新配置[{section}][{option}]成功")
        except Exception as e:
            log.error(f"更新配置[{section}][{option}]失败: {str(e)}")
            raise

    def get_browser(self):
        """获取浏览器类型"""
        return self._get(SECTION_DRIVER, 'BROWSER')

    def get_headless(self):
        """获取是否使用无头模式"""
        headless_value = self._get(SECTION_DRIVER, 'HEADLESS')
        return headless_value.lower() in ('true', '1', 'yes', 'y')

    @property
    def web_url(self):
        """获取Web应用URL地址"""
        return self._get(SECTION_HOST, 'HOST')

    @property
    def web_driver_process(self):
        """获取浏览器驱动进程名称"""
        return self._get(SECTION_DRIVER, 'DRIVER_PROCESS')


# 创建配置读取实例
web_cfg = ReadConfig(cm.web_ini_file)
